Log.print('service module: misc');

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@
//
// Σε αυτό το module υπάρχουν μέθοδοι και δομές που αφορούν σε
// αιτήματα των clients που δεν εμπίπτουν στα υπόλοιπα modules.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////@

// Η μέθοδος "alagiThesis" αλλάζει θέση θέασης για τον θεατή που αιτείται
// το σχετικό αίτημα. Αν ο server δεν δύναται να ικανοποιήσει το αίτημα,
// αποστέλλεται μήνυμα λάθους, αλλιώς αποστέλλεται κενή απάντηση.

Service.alagiThesis = function(nodereq) {
	if (nodereq.isvoli()) return;

	var sinedria = Sinedria.iparxi(nodereq.url.pektis);
	if (Sinedria.oxiTheatis(sinedria) ||
		(!Theatis.list.hasOwnProperty(sinedria.p))) return nodereq.end('Δεν είστε πια θεατής');

	if (!nodereq.url.hasOwnProperty('thesi')) return nodereq.end('Ακαθόριστη θέση θέασης');

	var thesi = nodereq.url.thesi;
	if (!Skiniko.thesiValid.hasOwnProperty(thesi)) return nodereq.end('Λανθασμένη θέση θέασης');

	if (sinedria.h == thesi) return nodereq.end('Είστε ήδη θεατής στη θέση αυτή');

	nodereq.end();
	Theatis.list[sinedria.p].h = thesi;
	sinedria.h = thesi;
}

// Η μέθοδος "katastasi" προκαλεί αλλαγή κατάστασης του παίκτη που δρομολόγησε
// το σχετικό αίτημα. Πιο συγκεκριμένα, αν ο παίκτης είναι απασχολημένος καθίσταται
// διαθέσιμος και το αντίστροφο.

Service.katastasi = function(req) {
	var conn, katastasi;
	if (req.isvoli()) return;

	conn = DB.connection();
	if (req.pektis.isApasxolimenos()) {
		katastasi = 'ΔΙΑΘΕΣΙΜΟΣ';
		query = "DELETE FROM `peparam` WHERE `pektis` = BINARY " +
			conn.escape(req.sinedria.pektis) + " AND `param` = " + conn.escape('ΚΑΤΑΣΤΑΣΗ');
	}
	else {
		katastasi = 'ΑΠΑΣΧΟΛΗΜΕΝΟΣ';
		query = "REPLACE INTO `peparam` (`pektis`, `param`, `timi`) VALUES (" +
			conn.escape(req.sinedria.pektis) + ", " + conn.escape('ΚΑΤΑΣΤΑΣΗ') + ", " +
			conn.escape(katastasi) + ')';
	}

	conn.connection.query(query, function(err, res) {
		conn.free();
		if (err) return req.end('Απέτυχε η αλλαγή κατάστασης παίκτη');

		req.end();
		req.pektis.peparamSet('ΚΑΤΑΣΤΑΣΗ', katastasi);
		(new Kinisi({
			'?': 'PPRM',
			'p': req.sinedria.pektis,
			'r': Prefadoros.peparamEco('ΚΑΤΑΣΤΑΣΗ'),
			't': Prefadoros.peparamEncode('ΚΑΤΑΣΤΑΣΗ', katastasi),
		})).kinisiAdd();
	});
}

Service.blockimage = function(req) {
	var conn, query, timi;
	if (req.isvoli()) return;

	conn = DB.connection();
	if (req.pektis.blockimage()) {
		timi = 'ΟΧΙ';
		query = "DELETE FROM `peparam` WHERE `pektis` = BINARY " +
			conn.escape(req.sinedria.pektis) + " AND `param` = 'BLOCKIMAGE'";
	}
	else {
		timi = 'ΝΑΙ';
		query = "REPLACE INTO `peparam` (`pektis`, `param`, `timi`) VALUES (" +
			conn.escape(req.sinedria.pektis) + ", 'BLOCKIMAGE', 'ΝΑΙ')";
	}

	conn.connection.query(query, function(err, res) {
		conn.free();
		if (err) return req.end('Απέτυχε η αλλαγή πορνοπαγίδας');

		req.end();
		req.pektis.peparamSet('BLOCKIMAGE', timi);
		(new Kinisi({
			'?': 'PPRM',
			'p': req.sinedria.pektis,
			'r': Prefadoros.peparamEco('BLOCKIMAGE'),
			't': Prefadoros.peparamEncode('BLOCKIMAGE', timi),
		})).kinisiAdd();
	});
}
